package agents.persons.dependent;

import java.awt.Point;

import org.apache.log4j.Logger;

import com.avanti.routes.ListaCuadrantes;

import constants.Situacion;
import es.ucm.fdi.agents.yellowPages.YellowPages;

import agents.messages.MessageConstants;

import jade.core.AID;
import jade.core.Agent;
import jade.domain.DFService;
import jade.domain.FIPAException;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.domain.FIPAAgentManagement.ServiceDescription;
import log.Action;
import log.ContadorEventos;

public class Dependent extends Agent{

	/**
	 * 
	 */
	private static final long serialVersionUID = -3787694671468306613L;
	private static Logger logger = Logger.getLogger(Dependent.class);

	private Point posicion;
	
	private int cuadrante;
	
	private AID myLeader = null;
	private int myLeaderLeadership = -1;
	private Point leaderPosition;
	private YellowPages paginasAmarillas;
	
	private long salud = 1;
	private int situacion = Situacion.NORMAL;
	
	public long getSalud() {
		return salud;
	}

	public void setSalud(long salud) {
		this.salud = salud;
	}

	public int getSituacion() {
		return situacion;
	}

	public void setSituacion(int situacion) {
		this.situacion = situacion;
	}

	public Point getLeaderPosition() {
		return leaderPosition;
	}

	public void setLeaderPosition(Point leaderPosition) {
		this.leaderPosition = leaderPosition;
	}

	public AID getMyLeader() {
		return myLeader;
	}

	public void setMyLeader(AID myLeader) {
		this.myLeader = myLeader;
	}

	public int getMyLeaderLeadership() {
		return myLeaderLeadership;
	}

	public void setMyLeaderLeadership(int myLeaderLeadership) {
		this.myLeaderLeadership = myLeaderLeadership;
	}

	public int getCuadrante() {
		return cuadrante;
	}

	public void setCuadrante(int cuadrante) {
		this.cuadrante = cuadrante;
	}

	protected void setup() {
		posicion = (Point)this.getArguments()[0];
		////System.out.println("Dependiente posicion inicial: "+posicion);
		cuadrante =  ListaCuadrantes.getInstance().getIdCuadrante(posicion);
		//System.out.println("## Punto "+posicion.x+","+posicion.y+"-> Cuad: "+cuadrante);
		DFAgentDescription dfd = new DFAgentDescription();
		dfd.setName(getAID());
		ServiceDescription sd = new ServiceDescription();
		sd.setType(MessageConstants.SERV_BUSCO_LIDERAZGO);  //Tipo del servicio que ofrece el agente en las paginas amarillas
		sd.setName(MessageConstants.SERV_BUSCO_LIDERAZGO);  //Nombre del servicio ofrecido
		dfd.addServices(sd);
		paginasAmarillas = new YellowPages();
		////System.out.println("Creado agente dependiente con id "+this.getLocalName());
		try{
			DFService.register(this, dfd);
		}
		catch(FIPAException e) {
			e.printStackTrace();
		}
		logger.info(ContadorEventos.addEvent("("+posicion.x+", "+posicion.y+")", Action.NACER, "Cuadrante: "+ListaCuadrantes.getInstance().getIdCuadrante(posicion)));

		addBehaviour(new SearchLeaderBehaviour(this,202));
		addBehaviour(new ReceiveLeaderPosition(this, 202));
	}

	public Point getPosicion() {
		return posicion;
	}

	public void setPosicion(Point posicion) {
		this.posicion = posicion;
	}
	public void setPosicion(int x, int y) {
		this.posicion.x = x;
		this.posicion.y = y;
	}
	
	public YellowPages getPaginasAmarillas(){
		return paginasAmarillas;
	}

}
